home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 40
/
Aminet 40 (2000)(Schatztruhe)[!][Dec 2000].iso
/
Aminet
/
misc
/
emu
/
ATUtilities.lha
/
ATUtilities
/
BASIC
/
SHOW2.BAS
< prev
next >
Wrap
BASIC Source File
|
2000-09-29
|
9KB
|
470 lines
$INCLUDE "REGNAMES.INC"
CLS
PRINT "Show! - Version 0.9 - Copyright (C) 1993 by Thomas Dreibholz"
IF CheckVector(&H49)=0 THEN
PRINT "FEHLER: File Transfer ist nicht aktiv."
PRINT " FILE.EXE wurde nicht durch die CONFIG.SYS eingebunden!"
GOTO ende
END IF
IF CheckVector(&H33)=0 THEN
PRINT "FEHLER: Maustreiber nicht vorhanden!"
GOTO ende
END IF
REG %AX,0
CALL INTERRUPT &H33
IF REG(%AX)=0 THEN
PRINT "FEHLER: Fehler bei Reset des Maustreibers!"
GOTO ende
END IF
tasten=REG(%BX)
REG %AX,(&H6*256)
CALL INTERRUPT &H49
jseg=REG(%ES)
janus=REG(%DI)
REG %AX,(&H4F*256)
REG %ES,jseg
REG %DI,janus
CALL INTERRUPT &H10
IF REG(%AX)<>&H4F THEN
PRINT "FEHLER: Es ist keine SuperVGA-Karte installiert, oder der"
PRINT " VESA-Treiber wurde nicht in die CONFIG.SYS eingebunden."
GOTO ende
END IF
REG %AX,(&H4F*256)+&H01
REG %CX,&H101
REG %ES,jseg
REG %DI,janus
CALL INTERRUPT &H10
IF REG(%AX)<>&H4F THEN
PRINT "FEHLER: SuperVGA-Karte untersttzt den Modus $101 (640*480 bei 256 Farben)"
PRINT " nicht. Diese Auflsung wird aber mindestens bentigt."
END IF
DEF SEG = jseg
m101.Segment=PEEKI(janus+8)
m101.Add=PEEKI(janus+4)
m101.File=OpenAmiga("M:Display640")
IF m101.File=-1 THEN
PRINT "FEHLER: Die Datei SYS:PC/ATUtilities/Display640.cdat lát sich"
PRINT " nicht ffnen."
GOTO ende
END iF
m101.FileOkay=100
REG %AX,(&H4F*256)+&H01
REG %CX,&H103
REG %ES,jseg
REG %DI,janus
CALL INTERRUPT &H10
IF REG(%AX)=&H4F THEN
DEF SEG = jseg
m103.Okay=100
m103.Segment=PEEKI(janus+8)
m103.Add=PEEKI(janus+4)
m103.File=OpenAmiga("M:Display800")
IF m103.File=-1 THEN
PRINT "FEHLER: Die Datei SYS:PC/ATUtilities/Display800.cdat lát sich"
PRINT " nicht ffnen."
GOTO ende
END iF
m103.FileOkay=100
END IF
DIM bilder$(10)
bilder$(0)="CC:Prgs/F11.cdat"
bilder$(1)="CC:Prgs/T1.cdat"
bilder$(2)="CC:Prgs/F12.cdat"
bilder$(3)="CC:Prgs/J1.cdat"
bilder$(4)="CC:Prgs/F13.cdat"
bilder$(5)="CC:Prgs/Newton.cdat"
bilder$(6)="CC:Prgs/F14.cdat"
bilder$(7)="CC:Prgs/F640*480.cdat"
bilder$(8)="CC:Prgs/F800*600.cdat"
bilder=8
richtung=1
wiederholung=0
bool=1 : bildFH=-1 : bnum=0
WHILE bool=1
IF bnum<>-1 THEN
bild$=bilder$(bnum)
IF bildFH<>-1 THEN CALL CloseAmiga(bildFH)
CALL LadeBild
CALL LadePalette
FOR schleife=0 TO 15000
IF INKEY$<>"" OR bildFH=-1 OR Button<>0 THEN
WHILE Button<>0 : WEND
q:
f=Schalter
IF f=0 THEN richtung=-1 : GOTO neu
IF f=1 THEN richtung=1 : GOTO neu
IF f=2 THEN bnum=0 : GOTO weiter
IF f=3 THEN bnum=bilder : GOTO weiter
IF f=4 THEN
WHILE INKEY$="":WEND
GOTO q
END IF
IF f=7 THEN GOTO ende
IF bildFH=-1 THEN GOTO weiter
END IF
NEXT
ELSE
GOTO q
END IF
neu:
bnum=bnum+richtung
IF wiederholung=1 THEN
IF bnum>bilder THEN bnum=0
IF bnum<0 THEN bnum=bilder
ELSE
IF bnum>bilder OR bnum<0 THEN bnum=-1
END IF
weiter:
WEND
ende:
SCREEN 0
CLS
IF bildFH<>-1 THEN CALL CloseAmiga(bildFH)
IF m103.FileOkay THEN CALL CloseAmiga(m103.File)
IF m101.FileOkay THEN CALL CloseAmiga(m101.File)
SOUND 1500,2
PRINT "bye!"
END
FUNCTION CheckVector(num) STATIC
REG %AX,(&H35*256)+num
CALL INTERRUPT &H21
segm&=REG(%ES)
offs&=REG(%BX)
DEF SEG = segm&
IF (segm&=0) OR (PEEK(offs&)=207) THEN
CheckVector=0
ELSE
CheckVector=1
END IF
END FUNCTION
FUNCTION OpenAmiga(n$) SHARED
n$=n$+CHR$(0)
DEF SEG = jseg
FOR i=1 TO LEN(n$)
POKE janus+i-1,ASC(MID$(n$,i,1))
NEXT
REG %AX,&H0*256
REG %BX,1
CALL INTERRUPT &H49
IF REG(%AX)=10000 THEN
OpenAmiga=REG(%BX)
ELSE
OpenAmiga=-1
END IF
END FUNCTION
SUB CloseAmiga(handle) STATIC
REG %AX,&H1*256
REG %BX,handle
CALL INTERRUPT &H49
END SUB
SUB SeekAmiga(handle,p) STATIC
REG %AX,&H7*256
REG %BX,handle
REG %CX,p
CALL INTERRUPT &H49
END SUB
FUNCTION ReadAmiga(handle,length) STATIC
REG %AX,&H2*256
REG %BX,handle
REG %CX,length
CALL INTERRUPT &H49
ReadAmiga=REG(%BX)
END FUNCTION
SUB CopyToPC(s,o&,length) STATIC
REG %AX,&H5*256
REG %BX,s
REG %DX,o&
REG %CX,length
CALL INTERRUPT &H49
END SUB
SUB SelectRAM(num) STATIC
REG %AX,(&H4F*256)+&H05
REG %BX,0
REG %DX,num
CALL INTERRUPT &H10
END SUB
SUB SelectMode(num) SHARED
REG %AX,(&H4F*256)+&H02
REG %BX,num
CALL INTERRUPT &H10
IF mode=&H103 THEN
segment=m103.Segment
add=m103.Add
ELSE
segment=m101.Segment
add=m101.Add
END IF
modus=num
END SUB
SUB LadePalette SHARED
d=ReadAmiga(bildFH,4)
DEF SEG = jseg
farben=PEEK(janus+3)
IF CHR$(PEEK(janus+0))="P" THEN
d=ReadAmiga(bildFH,3*255)
IF d>0 THEN
anzcols=d/3
REG %AX,(&H10*256)+&H12
REG %BX,0
REG %CX,INT(d/3)
REG %ES,jseg
REG %DX,janus
CALL INTERRUPT &H10
END IF
ELSE
p=janus
IF farben<253 THEN farben=farben+3
s=INT(farben/3)
s2=s+s
FOR i=1 TO s
s3=15+(i*(240/s))
POKE p+0,i
POKE p+1,i
POKE p+2,s3
POKE p+s,s3
POKE p+s+1,s3
POKE p+s+2,i
POKE p+s2,s3
POKE p+s2+1,i
POKE p+s2+2,i
p=p+3
NEXT
REG %AX,(&H10*256)+&H12
REG %BX,0
REG %CX,255
REG %ES,jseg
REG %DX,janus
CALL INTERRUPT &H10
END IF
END SUB
SUB LadeBild SHARED
bild=0
bildFH=OpenAmiga(bild$)
IF bildFH<>-1 THEN
d=ReadAmiga(bildFH,8)
IF d=8 THEN
DEF SEG = jseg
IF CHR$(PEEK(janus+0))="C" AND CHR$(PEEK(janus+1))="D" AND CHR$(PEEK(janus+2))="A" AND CHR$(PEEK(janus+3))="T" THEN
w=PEEK(janus+4)*256+PEEK(janus+5)
h=PEEK(janus+6)*256+PEEK(janus+7)
IF w=800 THEN
modus=&H103
IF m103.Okay<>100 THEN
modus=0
END IF
ELSE
modus=&H101
END IF
IF modus<>0 THEN
size&=w*h
CALL SelectMode(modus)
IF REG(%AX)=&H4F THEN
bild=1
CALL Lade(bildFH,w*h)
END IF
ELSE
SOUND 1500,5
END IF
ELSE
SOUND 1500,5
END IF
ELSE
SOUND 1500,5
END IF
ELSE
SOUND 1500,5
END IF
END SUB
SUB Lade(fh,size&) SHARED
p&=0 : d&=0 : bytes=1 : s=0
WHILE d&<size&
IF d&+16384>size& THEN l=size&-d& ELSE l=16384
bytes=ReadAmiga(fh,l)
CALL CopyToPC(segment,p&,bytes)
p&=p&+bytes
d&=d&+bytes
IF p&>65535 THEN
s=s+1
p&=0
CALL SelectRAM(s)
END IF
WEND
END SUB
SUB SetPal(farbe,r,g,b) STATIC
REG %AX,(&H10*256)+&H10
REG %BX,farbe
REG %CX,(g*256)+b
REG %DX,(r*256)
CALL INTERRUPT &H10
END SUB
SUB DrawX(x,y,sw,w,farbe) STATIC
xs=(y*sw)+x
FOR i=xs TO xs+w
POKE i,farbe
NEXT
END SUB
SUB DrawY(x,y,sw,h,farbe) STATIC
FOR i=y TO y+h
POKE (i*sw)+x,farbe
NEXT
END SUB
SUB DrawBox(x,y,w,h,farbe) SHARED
DEF SEG = segment
IF modus=&H103 THEN sw=800 ELSE sw=640
CALL DrawX(x,y,sw,w,farbe)
CALL DrawX(x,y+h,sw,w,farbe)
CALL DrawY(x,y,sw,h,farbe)
CALL DrawY(x+w,y,sw,h,farbe)
END SUB
SUB Draw3dBox(x,y,w,h,farbe1,farbe2) SHARED
DEF SEG = segment
IF modus=&H103 THEN sw=800 ELSE sw=640
CALL DrawX(x,y,sw,w,farbe1)
CALL DrawX(x,y+h,sw,w,farbe2)
CALL DrawY(x,y,sw,h,farbe1)
CALL DrawY(x+w,y,sw,h,farbe2)
END SUB
FUNCTION Button STATIC
REG %AX,3
CALL INTERRUPT &H33
Button=REG(%BX)
END FUNCTION
FUNCTION Schalter SHARED
DIM cx(4),dx(4)
IF bildFH=-1 THEN
CALL SelectMode(&H101)
END IF
CALL SelectRAM(0)
j=0
FOR i=12 TO 15
REG %AX,(&H10*256)+&H15
REG %BX,i
CALL INTERRUPT &H10
cx(j)=REG(%CX)
dx(j)=REG(%DX)
j=j+1
NEXT
CALL SetPal(12,255,255,80)
CALL SetPal(13,160,160,180)
CALL SetPal(14,0,0,0)
CALL SetPal(15,255,255,255)
IF modus=&H103 THEN
CALL SeekAmiga(m103.File,8)
CALL Lade(m103.File,48800)
ELSE
CALL SeekAmiga(m101.File,8)
CALL Lade(m101.File,39040)
END IF
REG %AX,&H0B
CALL INTERRUPT &H33
ende1=1
IF wiederholung=1 THEN
CALL Draw3dBox(5+(6*78),10,75,25,14,15)
END IF
gad=0 : ogad=0 : old=0 : down=0 : wahl=-1
CALL DrawBox(4,9,77,27,12)
i$=""
WHILE ende1=1
REG %AX,&H0B
CALL INTERRUPT &H33
i$=INKEY$
last=(REG(%CX)/4)+old
IF last<-6 OR i$="4" THEN
IF gad>0 THEN gad=gad-1
old=0
ELSEIF last>6 OR i$="6" THEN
IF gad<7 THEN gad=gad+1
old=0
ELSE
old=last
END IF
IF gad<>ogad THEN
IF down=1 THEN
CALL Draw3dBox(5+(ogad*78),10,75,25,15,14)
down=0
END IF
CALL DrawBox(4+(ogad*78),9,77,27,13)
CALL DrawBox(4+(gad*78),9,77,27,12)
ogad=gad
END IF
o=Button
IF o>1 OR i$=CHR$(27) THEN
ende1=0
ELSE
IF o=1 OR i$=CHR$(13) THEN
IF gad=6 THEN
IF wiederholung=0 THEN
CALL Draw3dBox(5+(6*78),10,75,25,14,15)
wiederholung=1
ELSE
CALL Draw3dBox(5+(6*78),10,75,25,15,14)
wiederholung=0
END IF
WHILE Button<>0 : WEND
ELSE
CALL Draw3dBox(5+(gad*78),10,75,25,14,15)
down=1
END IF
ELSE
IF down=1 THEN
CALL Draw3dBox(5+(gad*78),10,75,25,15,14)
wahl=gad
down=0
ende1=0
END IF
END IF
END IF
WEND
IF bild=1 THEN
IF modus=&H103 THEN
CALL SeekAmiga(bildFH,8)
CALL Lade(bildFH,48800)
ELSE
CALL SeekAmiga(bildFH,8)
CALL Lade(bildFH,39040)
END IF
END IF
j=0
FOR i=12 TO 15
REG %AX,(&H10*256)+&H10
REG %BX,i
REG %CX,cx(j)
REG %DX,dx(j)
CALL INTERRUPT &H10
j=j+1
NEXT
Schalter=wahl
END FUNCTION